package org.example.xsda.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 审批申请实体类
 * 
 * 申请类型(applyType):
 * 1 - 学籍异动申请
 * 2 - 信息修改申请
 * 3 - 档案附件审核
 * 
 * 子类型(subType):
 * transfer - 转学
 * suspension - 休学
 * return - 复学
 * dropout - 退学
 * info_modify - 信息修改
 * file_audit - 附件审核
 * 
 * 状态(status):
 * 0 - 待审批
 * 1 - 已通过
 * 2 - 已拒绝
 * 
 * 审批层级(approvalLevel):
 * 1 - 班主任初审
 * 2 - 教务处终审
 */
@Data
@TableName("approval")
public class Approval {
    
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /** 学生ID */
    private Long studentId;
    
    /** 申请类型：1-学籍异动 2-信息修改 3-档案附件 */
    private Integer applyType;
    
    /** 子类型：transfer/suspension/return/dropout/info_modify/file_audit */
    private String subType;
    
    /** 申请内容描述 */
    private String content;
    
    /** 原值（JSON格式，用于信息修改） */
    private String oldValue;
    
    /** 新值（JSON格式，用于信息修改） */
    private String newValue;
    
    /** 附件URL（多个用逗号分隔） */
    private String attachmentUrl;
    
    /** 附件ID列表（多个用逗号分隔） */
    private String attachmentIds;
    
    /** 目标班级ID（转班时使用） */
    private Long targetClassId;
    
    /** 目标院系ID（转系时使用） */
    private Long targetDeptId;
    
    /** 开始日期（休学/复学时使用） */
    private LocalDate startDate;
    
    /** 结束日期（休学/复学时使用） */
    private LocalDate endDate;
    
    /** 当前审批层级：1-班主任初审 2-教务处终审 */
    private Integer approvalLevel;
    
    /** 当前审批人ID */
    private Long currentApproverId;
    
    /** 历史审批意见（JSON数组） */
    private String historyOpinion;
    
    /** 优先级：0-普通 1-重要 2-紧急 */
    private Integer priority;
    
    /** 状态：0-待审批 1-已通过 2-已拒绝 */
    private Integer status;
    
    /** 当前审批意见 */
    private String remark;
    
    /** 申请时间 */
    private LocalDateTime applyTime;
    
    /** 审批完成时间 */
    private LocalDateTime approveTime;
    
    /** 最终审批人ID */
    private Long approverId;
    
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    
    @TableLogic
    private Integer deleted;
}

